package org.jeecg.modules.lab.entrust.service.impl;


import ch.qos.logback.core.net.SyslogOutputStream;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.jeecg.modules.lab.entrust.entity.LabEntrustItems;
import org.jeecg.modules.lab.entrust.entity.LabItemsRecordReport;
import org.jeecg.modules.lab.entrust.entity.LabWentrust;
import org.jeecg.modules.lab.entrust.entity.LabWsupervise;
import org.jeecg.modules.lab.entrust.mapper.LabProcessMapper;
import org.jeecg.modules.lab.entrust.service.ILabEntrustItemsService;
import org.jeecg.modules.lab.entrust.service.ILabProcessService;
import org.jeecg.modules.lab.entrust.service.ILabWentrustService;
import org.jeecg.modules.lab.entrust.service.ILabWsuperviseService;
import org.jeecg.modules.lab.entrust.vo.LabProcessPage;
import org.jeecg.modules.lab.items.record.service.ILabItemsRecordReportService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;


@Service
public class LabProcessServiceImpl extends ServiceImpl<LabProcessMapper, LabProcessPage> implements ILabProcessService {

    @Autowired
    private ILabWentrustService labWentrustService;

    @Autowired
    private ILabWsuperviseService labWsuperviseService;

    @Autowired
    private ILabEntrustItemsService labEntrustItemsService;

    @Autowired
    private ILabItemsRecordReportService labItemsRecordReportService;

    @Override
    public LabProcessPage getProcessPage(String entrustId, String entrustType) {

        LabProcessPage labProcessPage = new LabProcessPage();

        if ("委托检验".equals(entrustType)) {
            LabWentrust labWentrust = labWentrustService.getById(entrustId);
            String audit = labWentrust.getAuditMark();
            String allot = labWentrust.getAllotStatus();
            // 委托发布
            if ("制单中".equals(audit) || "审核退回".equals(audit)) {
                labProcessPage.setZ1("2");
            } else if ("审核中".equals(audit) || "审核通过".equals(audit) ) {
                labProcessPage.setZ1("1");
            } else {
                labProcessPage.setZ1("0");
            }
            // 提交
            if ("审核中".equals(audit) || "审核通过".equals(audit) || "审核退回".equals(audit)) {
                labProcessPage.setZ2("1");
            } else {
                labProcessPage.setZ2("0");
            }
            // 委托审核
            if ("审核中".equals(audit)) {
                labProcessPage.setZ3("2");
            } else if ( "审核通过".equals(audit) || "审核退回".equals(audit)) {
                labProcessPage.setZ3("1");
            } else {
                labProcessPage.setZ3("0");
            }
            //审核不通过
            if ("审核退回".equals(audit)) {
                labProcessPage.setZ4("1");
            } else {
                labProcessPage.setZ4("0");
            }
            // 入库
            if ("审核通过".equals(audit)) {
                labProcessPage.setZ10("1");
            } else {
                labProcessPage.setZ10("0");
            }
            // 样品入库
            if ("审核通过".equals(audit)) {
                labProcessPage.setZ11("1");
            } else {
                labProcessPage.setZ11("0");
            }
            // 审核通过
            if ("审核通过".equals(audit)) {
                labProcessPage.setZ12("1");
            } else {
                labProcessPage.setZ12("0");
            }
            // 任务分配
            if ("审核通过".equals(audit) && "未分配".equals(allot)) {
                labProcessPage.setZ13("2");
            } else if ("审核通过".equals(audit) && "已分配".equals(allot)) {
                labProcessPage.setZ13("1");
            } else {
                labProcessPage.setZ13("0");
            }
            // 分配
            if ("已分配".equals(allot)) {
                labProcessPage.setZ14("1");
            } else {
                labProcessPage.setZ14("0");
            }

        } else {
            LabWsupervise labWsupervise = labWsuperviseService.getById(entrustId);
            String audit = labWsupervise.getAuditMark();
            String allot = labWsupervise.getAllotStatus();
            // 监督单编制
            if ("制单中".equals(audit) || "审核退回".equals(audit)) {
                labProcessPage.setZ1("2");
            } else if ("审核中".equals(audit) || "审核通过".equals(audit) ) {
                labProcessPage.setZ1("1");
            } else {
                labProcessPage.setZ1("0");
            }
            // 提交
            if ("审核中".equals(audit) || "审核通过".equals(audit) || "审核退回".equals(audit)) {
                labProcessPage.setZ2("1");
            } else {
                labProcessPage.setZ2("0");
            }
            // 委托审核
            if ("审核中".equals(audit)) {
                labProcessPage.setZ3("2");
            } else if ( "审核通过".equals(audit) || "审核退回".equals(audit)) {
                labProcessPage.setZ3("1");
            } else {
                labProcessPage.setZ3("0");
            }
            //审核不通过
            if ("审核退回".equals(audit)) {
                labProcessPage.setZ4("1");
            } else {
                labProcessPage.setZ4("0");
            }


            // 入库
            if ("审核通过".equals(audit)) {
                labProcessPage.setZ10("1");
            } else {
                labProcessPage.setZ10("0");
            }
            // 样品入库
            if ("审核通过".equals(audit)) {
                labProcessPage.setZ11("1");
            } else {
                labProcessPage.setZ11("0");
            }
            // 审核通过
            if ("审核通过".equals(audit)) {
                labProcessPage.setZ12("1");
            } else {
                labProcessPage.setZ12("0");
            }
            // 任务分配
            if ("审核通过".equals(audit) && "未分配".equals(allot)) {
                labProcessPage.setZ13("2");
            } else if ("审核通过".equals(audit) && "已分配".equals(allot)) {
                labProcessPage.setZ13("1");
            } else {
                labProcessPage.setZ13("0");
            }
            // 分配
            if ("已分配".equals(allot)) {
                labProcessPage.setZ14("1");
            } else {
                labProcessPage.setZ14("0");
            }

        }
        List<LabEntrustItems> labEntrustItemsList = labEntrustItemsService.selectItemsByMainId(entrustId);

        boolean boolA = false; // 未分配
        boolean boolB = false; // 待实验
        boolean boolC = false; // 待复核
        boolean boolD = false; // 已检测

        if (labEntrustItemsList == null || labEntrustItemsList.size() == 0) {
            //实验人员进行实验
            labProcessPage.setZ15("0");
            //实验
            labProcessPage.setZ16("0");
            //自动生成
            labProcessPage.setZ17("0");
            //自动生成
            labProcessPage.setZ18("0");
            //填写原始记录
            labProcessPage.setZ19("0");
            //设备运行记录
            labProcessPage.setZ20("0");
            //样品流转记录
            labProcessPage.setZ21("0");
            //提交
            labProcessPage.setZ22("0");
            //复核实验原始记录
            labProcessPage.setZ23("0");
            //
            labProcessPage.setZ24("0");
            //判断是否有下一个实验项目
            labProcessPage.setZ25("0");
            //是
            labProcessPage.setZ26("0");
            //否
            labProcessPage.setZ27("0");
            //编制实验报告
            labProcessPage.setZ28("0");
            //提交
            labProcessPage.setZ29("0");
            //报告审核
            labProcessPage.setZ30("0");
            //审核不通过
            labProcessPage.setZ31("0");
            //审核通过
            labProcessPage.setZ32("0");
            //报告批准
            labProcessPage.setZ33("0");
            //批准不通过
            labProcessPage.setZ34("0");
            //批准通过
            labProcessPage.setZ35("0");
            //报告盖章
            labProcessPage.setZ36("0");
            //
            labProcessPage.setZ37("0");
            //报告下载（打印归档）
            labProcessPage.setZ38("0");


        } else {
            for (LabEntrustItems labEntrustItems : labEntrustItemsList) {
                String status = labEntrustItems.getItemStatus();
                //todo 待分配 待实验 待复核 已检测
                if ("待分配".equals(status)) {
                    boolA = true;
                    break;
                }
            }
            //todo 还项目在 待实验 状态
            if (boolA) {
                //实验人员进行实验
                labProcessPage.setZ15("0");
                //实验
                labProcessPage.setZ16("0");
                //自动生成
                labProcessPage.setZ17("0");
                //自动生成
                labProcessPage.setZ18("0");
                //填写原始记录
                labProcessPage.setZ19("0");
                //设备运行记录
                labProcessPage.setZ20("0");
                //样品流转记录
                labProcessPage.setZ21("0");
                //提交
                labProcessPage.setZ22("0");
                //复核实验原始记录
                labProcessPage.setZ23("0");
                //
                labProcessPage.setZ24("0");
                //判断是否有下一个实验项目
                labProcessPage.setZ25("0");
                //是
                labProcessPage.setZ26("0");
                //否
                labProcessPage.setZ27("0");
            } else {
                for (LabEntrustItems labEntrustItems : labEntrustItemsList) {
                    String status = labEntrustItems.getItemStatus();
                    //todo 待分配 待实验 待复核 已检测
                    if ("待实验".equals(status)) {
                        boolB = true;
                        break;
                    }
                }
                for (LabEntrustItems labEntrustItems : labEntrustItemsList) {
                    String status = labEntrustItems.getItemStatus();
                    //todo 待分配 待实验 待复核 已检测
                    if ("待复核".equals(status) || "已实验".equals(status)) {
                        boolC = true;
                        break;
                    }
                }
                //todo 所有项目都在 待复核 已检测 状态
                if (boolB) {
                    //实验人员进行实验
                    labProcessPage.setZ15("2");
                    if (boolC) {
                        //实验
                        labProcessPage.setZ16("1");
                        //自动生成
                        labProcessPage.setZ17("1");
                        //自动生成
                        labProcessPage.setZ18("1");
                        //填写原始记录
                        labProcessPage.setZ19("1");
                        //设备运行记录
                        labProcessPage.setZ20("1");
                        //样品流转记录
                        labProcessPage.setZ21("1");
                        //提交
                        labProcessPage.setZ22("1");
                        //复核实验原始记录
                        labProcessPage.setZ23("1");
                        //
                        labProcessPage.setZ24("1");
                        //判断是否有下一个实验项目
                        labProcessPage.setZ25("1");
                        //是
                        labProcessPage.setZ26("1");
                        //否
                        labProcessPage.setZ27("0");
                    } else {
                        //实验
                        labProcessPage.setZ16("0");
                        //自动生成
                        labProcessPage.setZ17("0");
                        //自动生成
                        labProcessPage.setZ18("0");
                        //填写原始记录
                        labProcessPage.setZ19("0");
                        //设备运行记录
                        labProcessPage.setZ20("0");
                        //样品流转记录
                        labProcessPage.setZ21("0");
                        //提交
                        labProcessPage.setZ22("0");
                        //复核实验原始记录
                        labProcessPage.setZ23("0");
                        //
                        labProcessPage.setZ24("0");
                        //判断是否有下一个实验项目
                        labProcessPage.setZ25("0");
                        //是
                        labProcessPage.setZ26("0");
                        //否
                        labProcessPage.setZ27("0");
                    }
                } else {
                    for (LabEntrustItems labEntrustItems : labEntrustItemsList) {
                        String status = labEntrustItems.getItemStatus();
                        //todo 待分配 待实验 待复核 已检测
                        boolC = false;
                        if ("待复核".equals(status)) {
                            boolC = true;
                            break;
                        }
                    }
                    //所有项目都 已检测 状态
                    //实验人员进行实验
                    labProcessPage.setZ15("1");
                    //实验
                    labProcessPage.setZ16("1");
                    //自动生成
                    labProcessPage.setZ17("1");
                    //自动生成
                    labProcessPage.setZ18("1");
                    //填写原始记录
                    labProcessPage.setZ19("1");
                    //设备运行记录
                    labProcessPage.setZ20("1");
                    //样品流转记录
                    labProcessPage.setZ21("1");
                    //提交
                    labProcessPage.setZ22("1");
                    if (boolC) {
                        //复核实验原始记录
                        labProcessPage.setZ23("2");
                    } else {
                        //复核实验原始记录
                        labProcessPage.setZ23("1");
                        boolD = true;
                    }
                    //
                    labProcessPage.setZ24("1");
                    //判断是否有下一个实验项目
                    labProcessPage.setZ25("1");
                    //是
                    labProcessPage.setZ26("1");
                    //否
                    labProcessPage.setZ27("0");

                }
            }

            QueryWrapper<LabItemsRecordReport> queryWrapper = new QueryWrapper<>();
            queryWrapper.eq("task_id", entrustId);
            LabItemsRecordReport labItemsRecordReport = labItemsRecordReportService.getOne(queryWrapper);


            //报告状态
            String billStatus = "";
            if (labItemsRecordReport != null) {
                billStatus = labItemsRecordReport.getBillStatus();
            }
            if (boolD && "".equals(billStatus)) {
                //编制实验报告
                //否
                labProcessPage.setZ27("1");
                labProcessPage.setZ28("2");
                labProcessPage.setZ29("0");
                labProcessPage.setZ30("0");
                labProcessPage.setZ31("0");
                labProcessPage.setZ32("0");
                labProcessPage.setZ33("0");
                labProcessPage.setZ34("0");
                labProcessPage.setZ35("0");
                labProcessPage.setZ36("0");
                labProcessPage.setZ37("0");
                labProcessPage.setZ38("0");
            } else {
                labProcessPage.setZ27("1");
                // 编制实验报告
                if ("待编辑".equals(billStatus) || "审核退回".equals(billStatus)) {
                    labProcessPage.setZ28("2");
                } else if ("待审核".equals(billStatus) || "待批准".equals(billStatus) || "待盖章".equals(billStatus) || "下载".equals(billStatus)) {
                    labProcessPage.setZ28("1");
                } else {
                    labProcessPage.setZ28("0");
                }
                // 提交
                if ("待审核".equals(billStatus) || "审核退回".equals(billStatus) || "待批准".equals(billStatus) || "待盖章".equals(billStatus) || "下载".equals(billStatus)) {
                    labProcessPage.setZ29("1");
                } else {
                    labProcessPage.setZ29("0");
                }
                //审核报告
                if ("待审核".equals(billStatus) || "批准退回".equals(billStatus)) {
                    labProcessPage.setZ30("2");
                } else if ("审核退回".equals(billStatus) || "待批准".equals(billStatus) || "待盖章".equals(billStatus) || "下载".equals(billStatus)) {
                    labProcessPage.setZ30("1");
                } else {
                    labProcessPage.setZ30("0");
                }
                //审核不通过
                if ("审核退回".equals(billStatus)) {
                    labProcessPage.setZ31("1");
                } else {
                    labProcessPage.setZ31("0");
                }
                //审核通过
                if ("待批准".equals(billStatus) || "待盖章".equals(billStatus) || "下载".equals(billStatus)) {
                    labProcessPage.setZ32("1");
                } else {
                    labProcessPage.setZ32("0");
                }
                //报告批准
                if ("待批准".equals(billStatus)) {
                    labProcessPage.setZ33("2");
                } else if ("待盖章".equals(billStatus) || "下载".equals(billStatus)) {
                    labProcessPage.setZ33("1");
                } else {
                    labProcessPage.setZ33("0");
                }
                //批准不通过
                if ("批准退回".equals(billStatus)) {
                    labProcessPage.setZ34("1");
                } else {
                    labProcessPage.setZ34("0");
                }
                //批准通过
                if ("待盖章".equals(billStatus) || "下载".equals(billStatus)) {
                    labProcessPage.setZ35("1");
                } else {
                    labProcessPage.setZ35("0");
                }
                //报告盖章
                if ("下载".equals(billStatus)) {
                    labProcessPage.setZ36("1");
                } else {
                    labProcessPage.setZ36("0");
                }
                //
                if ("下载".equals(billStatus)) {
                    labProcessPage.setZ37("1");
                } else {
                    labProcessPage.setZ37("0");
                }
                // 报告下载（打印归档）
                if ("下载".equals(billStatus)) {
                    labProcessPage.setZ38("1");
                } else {
                    labProcessPage.setZ38("0");
                }
            }
        }
        return labProcessPage;
    }
}